#ifndef CLASSIFIERPASSPORT_H
#define CLASSIFIERPASSPORT_H

#include <QList>
#include <QHash>
#include <QString>

#include "BaseField.h"

/*! Класс паспорта классифкатора */
class ClassifierPassport
{
public:
    ClassifierPassport(const QString &name);
    ClassifierPassport(const QString &name, const QString &description);
    ~ClassifierPassport();

    /*! Возвращает имя классификатора */
    QString getName() const;
    /*! Устанавливает имя классификатора */
    void setName(const QString &name);

    /*! Возвращает описание классифкатора */
    QString getDescription() const;
    /*! Устанавливает описание классификатора */
    void setDescription(const QString &desc);

    /*! Возвращает список полей классификатора */
    QList<BaseField> fields() const;
    /*! Возвращает имена полей */
    QList<QString> fieldNames() const;
    /*! Возвращает поле поле по индексу */
    BaseField & operator [](int index);
    /*! Возвращает поле поле по имени */
    BaseField & operator [](const QString &name);
    /*! Возвращает поле поле по индексу */
    BaseField & getFieldAt(int index);
    /*! Возвращает поле поле по имени */
    BaseField & getField(const QString &name);
    /*! Добавляет поле в паспорт */
    void addField(const BaseField &field);
    /*! Добавляет поля в паспорт */
    void addField(const QList<BaseField> &fields);
    /*! Удаляает поле из паспорта */
    void removeField(const QString &name);

    QString toString();

private:
    QString _name;
    QString _description;
    /*! Список полей классификатора */
    QHash<QString, BaseField> _fields;
};

#endif // CLASSIFIERPASSPORT_H
